Topic系列告一段落啦,我們再來分享一些常用指令,還有好用的rqt_graph指令:
$ rostopic list
這個指令基本上我們之前用過啦,也跟rosnode list一樣,就是列出目前運行中的topic有哪些。
$ rostopic info <topic_name>
這個指令就是關於某個topic的詳細資料啦! 由下圖執行畫面可以看到我們之前寫的/chatter這個topic,需要輸入的訊息格式是std_msgs/String,可以由/talker發佈訊息,然後由/listener監聽。
$ rostopic echo <topic_name>
接下來這個指令比較重要啦,就是去監聽某個topic,也就是在我們寫完publisher以後可以用的debug工具,在前幾天寫publisher的時候已經用過啦,我就不再截圖囉!
$ rostopic pub <topic-name> <topic-type> [data...]
這個指令跟echo是相對的,也就是充當publisher的指令,負責對某個topic發送訊息,可以在我們寫完subscriber以後debug用。
可以看到我發送了一條hello from command line訊息,而我的/listener也確實收到囉!
講完Topic,接著來講一下Graph。ROS的資料結構是使用圖形(graph)的方式,並且提供一個好用的圖形化工具,可以看出每個node的連結狀況:
$ rosrun rqt_graph rqt_graph
$ rqt_graph
這兩個指令都可以執行,叫出我們的圖形化畫面:
可以看到我們有兩組的talker和listener,後面有亂數的是python產生的node,每個talker都連結到另外兩個listener,並且透過chatter這個topic傳輸資料。
但大家會不會覺得很奇怪,這個rqt_graph怎麼看就也像是某個node啊,怎麼沒有出現在圖形上呢?
這時候就要把上面的指令中的debug關掉,就可以看到隱藏的node囉!
是不是突然變得很複雜啊? 其實就只是多了一個rqt_gui_py_node和rosout,並且每個node都會連到rosout而已,因為rosout是負責輸出錯誤訊息的node嘛! 所以如果node遇到甚麼狀況的時候,就會發送訊息到rosout的topic中,並由rosout的node接收下來,差不多就是這樣啦!rqt_graph在大型專案中應該會蠻好用的,可以輕易看出node之間的連結性。
ROS wiki - rostopic
ROS tutorials- understanding Topics
ROS wiki - rqt_graph